package capaModelo;

import java.io.Serializable;
import java.util.AbstractMap;
import java.util.HashMap;

import main.Aplication;
import capaGrafica.AdminAdd_V;
import capaGrafica.AdminDelete_V;
import capaGrafica.AdminEdit_V;
import capaGrafica.Login_V;
import capaPersistencia.ModuloProductos;
import data.ProductoVO;

public class AdminEdit_M implements Modelo {

	@Override
	public void pressed(int code, AbstractMap<String, Serializable> data) {

		ModuloProductos miModulo = new ModuloProductos();
		ProductoVO p;
		switch(code){
		
			case AdminEdit_V.BTN_BUSCAR:
				
				if((p = miModulo.obtenerProducto((String)data.get("id"))) != null){
					AbstractMap<String,Serializable> datos = new HashMap<String, Serializable>();
					
					datos.put("imagen", p.getImagen());
					datos.put("descripcion", p.getDescripcion());
					datos.put("stock", p.getStock());
					datos.put("nombre", p.getNombre());
					datos.put("tipo", p.getTipo());
					datos.put("precio", p.getPrecio());
					datos.put("id", p.getId());
					
					if(p.getTipo().equals("Libro") || p.getTipo().equals("Pelicula")){
						datos.put("genero", p.getGenero());
						datos.put("autor", p.getAutor());
						datos.put("agno", p.getAnyo());
					}
					else if(p.getTipo().equals("Coleccionable")){
						datos.put("tamagno", p.getTamano());
					}
					else{
						datos.put("talla", p.getTalla());
						datos.put("color", p.getColor());
					}
					
					Aplication.actualWindow.change(AdminEdit_V.SEARCH_OK, datos);
//					PruebaProductos.actualWindow.change(AdminEdit_V.SEARCH_OK, datos);
				}
				else{
					AbstractMap<String,Serializable> datos = new HashMap<String, Serializable>();
					datos.put("error", "Producto " + data.get("id") + " no encontrado");
					Aplication.actualWindow.change(AdminEdit_V.SEARCH_ERROR, datos);
				}
				break;
				
			case AdminEdit_V.BTN_LOGOUT:
				Aplication.logedUser= null;
				Aplication.changeToWindow(new Login_V(), null);
				break;
				
			case AdminEdit_V.BTN_EDIT:

				
				boolean ok = false;

				String id = (String) data.get("id");
				String nombre = (String) data.get("nombre");
				String tipo = (String) data.get("tipo");
				double precio = (Double) data.get("precio");
				int stock = (Integer) data.get("stock");
				String imagen = (String) data.get("imagen");
				String descripcion = (String) data.get("descripcion");

				/* Libro o pelicula */
				if (tipo.equals("Libro") || tipo.equals("Pelicula")) {
					p = new ProductoVO(id, nombre, tipo, precio, stock, imagen,
							(String) data.get("genero"),
							(String) data.get("autor"), (Integer) data.get("agno"),
							descripcion);
					
					ok = miModulo.modificarProductosLibroPeli(p);
					
				}

				else if (tipo.equals("Coleccionable")) {
					p = new ProductoVO(id, nombre, tipo, precio, stock, imagen,
							(String) data.get("tamagno"), descripcion);
					
					ok = miModulo.modificarProductosColeccionables(p);
				}

				else if(tipo.equals("Ropa")){
					p = new ProductoVO(id, nombre, tipo, precio, stock, imagen,
							(String) data.get("talla"), (String) data.get("color"),
							descripcion);
					
					ok = miModulo.modificarProductosRopa(p);
				}
				
				/* Comprobamos si la inserccion ocurrio bien y notificamos */
				if(ok){
					HashMap<String,Serializable> datos = new HashMap<String,Serializable>();
					datos.put("editMessage", "Edicion realizada correctamente");
					Aplication.actualWindow.change(AdminEdit_V.EDIT_OK, datos);
//					PruebaProductos.actualWindow.change(AdminEdit_V.EDIT_OK, datos);

				}
				else{
					HashMap<String,Serializable> datos = new HashMap<String,Serializable>();
					datos.put("editMessage", "Problemas al realizar la edicion, revise los datos");
					Aplication.actualWindow.change(AdminEdit_V.EDIT_ERROR, datos);
				}
				
				break;
				
			case AdminEdit_V.MENU_ADD:
				Aplication.changeToWindow(new AdminAdd_V(), null);
				break;
				
			case AdminEdit_V.MENU_ELIMINAR:
				Aplication.changeToWindow(new AdminDelete_V(), null);
				break;
		}
		

	}

}
